home *** CD-ROM | disk | FTP | other *** search
- /*
- File MyOSAComponent.c
-
-
-
- Copyright © 1992-1993 Apple Computer, Inc. All rights reserved.}
-
- This is a sample program to implement the OSA interface.
- In this sample program, the source is the same as the internal compiled form.
- So compile and decompile just consists of copying and rename, and this is very
- unlike other OSA implementations. However, there is a lot of scripting language
- which just interprets the source and this sample program can be useful.
-
- Ported over to C 9/20/95
- R.Silva
-
-
-
- */
-
- #ifdef THINK_C
- #define applec
- #endif
-
- //#include "myHeaders.h"
-
- #include <Memory.h>
- #include <Errors.h>
- #include <Components.h>
-
-
- #include <Dialogs.h>
- #include <AppleEvents.h>
- #include <OSA.h>
- #include <OSAComp.h>
- #include <TextUtils.h>
-
- #define DEBUG_IT //comment this out when building scripting component
- //keep it defined when debugging the code
-
- #include "MyOSAComponent.h"
- #include "MyOSAComponentRoutines.h"
-
-
-
-
- /* ------------------------------------------------------------------------- */
-
- // Component entry point.
-
-
-
-
-
- #ifdef DEBUG_IT
-
- pascal ComponentResult OSADispatcher(ComponentParameters *params, char **storage)
-
- #else
-
- pascal ComponentResult main(ComponentParameters *params, char **storage)
-
- #endif DEBUG_IT
- {
- long ret;
- ComponentResult err;
-
- if ( kDEBUGME ){
- DebugStr("\pIn main()");
-
- }
-
- if ( params->what < 0 ) {
- switch ( params->what ) {
- case kComponentOpenSelect:
- if ( kDEBUGME )
- DebugStr("\pOpenConnection");
- err = CallComponentFunction(params, (ComponentFunctionUPP) MyOpen);
- break;
-
- case kComponentCloseSelect:
- if ( kDEBUGME )
- DebugStr("\pCloseConnection");
- err = CallComponentFunctionWithStorage(storage, params,
- (ComponentFunctionUPP) MyClose) ;
- break;
-
- case kComponentCanDoSelect:
- if ( kDEBUGME )
- DebugStr("\pCanDo");
- err = CallComponentFunction(params, (ComponentFunctionUPP) MyCanDo);
- break;
-
- case kComponentVersionSelect:
- if ( kDEBUGME )
- DebugStr("\pComponentVersionSelect");
- err = CallComponentFunction(params, (ComponentFunctionUPP) MyVersion);
- break;
-
- case kComponentRegisterSelect:
- if ( kDEBUGME )
- DebugStr("\pComponentRegisterSelect");
- err = CallComponentFunction(params, (ComponentFunctionUPP) MyRegister);
- break;
-
- case kComponentTargetSelect:
- if ( kDEBUGME )
- DebugStr("\pComponentTargetSelect");
- err = CallComponentFunctionWithStorage(storage, params,
- (ComponentFunctionUPP) MyTarget);
- break;
-
- default:
- err = paramErr;
- }
- } else {
- switch ( params->what ) {
-
- case kOSASelectLoad:
- if ( kDEBUGME )
- DebugStr("\pSelectLoad");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP) DoOSALoad);
- break;
-
- case kOSASelectStore:
- if ( kDEBUGME )
- DebugStr("\pSelectStore");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSAStore);
- break;
-
- case kOSASelectExecute:
- if ( kDEBUGME )
- DebugStr("\pSelectExecute");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSAExecute);
- break;
-
- case kOSASelectDisplay:
- if ( kDEBUGME )
- DebugStr("\pSelectDisplay");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSADisplay);
- break;
-
- case kOSASelectScriptError:
- if ( kDEBUGME )
- DebugStr("\pScriptError");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSAScriptError);
- break;
-
- case kOSASelectDispose:
- if ( kDEBUGME )
- DebugStr("\pSelectDispose");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSADispose);
- break;
-
- case kOSASelectCompile:
- if ( kDEBUGME )
- DebugStr("\pSelectCompile");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSACompile);
- break;
-
- case kOSASelectGetSource:
- if ( kDEBUGME )
- DebugStr("\pSelectGetSource");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSAGetSource);
- break;
-
- case kOSASelectScriptingComponentName:
- if ( kDEBUGME )
- DebugStr("\pSelectScriptName");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSAScriptingComponentName);
- break;
-
- case kOSASelectCoerceFromDesc:
- if ( kDEBUGME )
- DebugStr("\pSelectCoerceFromDesc");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSACoerceFromDesc);
- break;
-
- case kOSASelectCoerceToDesc:
- if ( kDEBUGME )
- DebugStr("\pSelectCoerceToDesc");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSACoerceToDesc);
- break;
-
- case kOSASelectLoadExecute:
- if ( kDEBUGME )
- DebugStr("\pSelectLoadExecute");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSALoadExecute);
- break;
-
- case kOSASelectCompileExecute:
- if ( kDEBUGME )
- DebugStr("\pSelectCompileExecute");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSACompileExecute);
- break;
-
- case kOSASelectDoScript:
- if ( kDEBUGME )
- DebugStr("\pSelectDoScript");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSADoScript);
- break;
-
- case kOSASelectMakeContext:
- if ( kDEBUGME )
- DebugStr("\pSelectMakeContext");
- err = CallComponentFunction(params, (ComponentFunctionUPP)DoOSAMakeContext);
- break;
-
- case kOSASelectSetScriptInfo:
- if ( kDEBUGME )
- DebugStr("\pSelectSetScriptInfo");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSASetScriptInfo);
- break;
-
- case kOSASelectGetScriptInfo:
- if ( kDEBUGME )
- DebugStr("\pSelectGetScriptInfo");
- err = CallComponentFunctionWithStorage(storage, params, (ComponentFunctionUPP)DoOSAGetScriptInfo);
- break;
-
- case kOSASelectSetActiveProc:
- case kOSASelectGetActiveProc:
- err = noErr;
- break;
-
- default:
- return( permErr );
- }
- }
- return err;
- }
-
- /* ------------------------------------------------------------------------- */
-
- // Required component calls.
-
-
- pascal ComponentResult MyOpen( ComponentInstance self)
- {
- GlobalsHandle globals;
- ComponentResult err;
-
- err = noErr;
- globals = (GlobalsHandle) NewHandleClear( sizeof(GlobalsRecord) ) ;
- if( globals == nil ) {
- err = memFullErr ; // some memory error
- }
- else {
- HLock((Handle)globals);
- //blank error message
- err = AECreateDesc(typeChar, " ", 1, &((*globals)->errorDesc));
- HUnlock((Handle)globals);
- if( err == noErr) {
- HLock((Handle)globals);
- (*globals)->gSelf = self;
- HUnlock((Handle)globals);
- SetComponentInstanceStorage(self, (Handle) globals);
- }
- else {
- DisposeHandle((Handle) globals);
- err = memFullErr;
- }
- }
- return err;
- }
-
- pascal ComponentResult MyClose(Handle myGlobals, ComponentInstance self)
- {
- int i;
- GlobalsHandle globals;
-
- globals = (GlobalsHandle) myGlobals;
-
- HLock((Handle)globals);
- AEDisposeDesc(&((*globals)->errorDesc));
- //dispose all the descriptors in the slots if the handles are not nil
- //we have to make sure all the unused slots have nil handles
- for( i = 0 ; i< MaxIDSlot; i++ ) {
- if( (((*globals)->scriptIDSlot)[i]).dataHandle != nil){
- AEDisposeDesc(&((*globals)->scriptIDSlot)[i]);
- (((*globals)->scriptIDSlot)[i]).dataHandle = nil;
- }
- }
- HUnlock( (Handle) globals);
- DisposeHandle((Handle) globals);
- return noErr;
- }
-
- pascal ComponentResult MyCanDo(short selector)
- {
- if ( kDEBUGME )
- DebugStr("\pIn MyCanDo()");
-
- switch ( selector ) {
-
- // Required component calls.
- case kComponentOpenSelect:
- case kComponentCloseSelect:
- case kComponentCanDoSelect:
- case kComponentVersionSelect:
- case kComponentRegisterSelect:
- case kComponentTargetSelect:
-
-
- // MyComponent specific calls.
- case kOSASelectLoad:
- case kOSASelectStore:
- case kOSASelectExecute:
- case kOSASelectDisplay:
- case kOSASelectScriptError:
- case kOSASelectDispose:
- case kOSASelectCompile:
- case kOSASelectGetSource:
- case kOSASelectScriptingComponentName:
- case kOSASelectCoerceFromDesc:
- case kOSASelectCoerceToDesc:
- case kOSASelectLoadExecute:
- case kOSASelectCompileExecute:
- case kOSASelectDoScript:
- case kOSASelectMakeContext:
- //DebugStr("\pIn the can do");
- return ( true );
-
- // Not handled.
- default:
- return ( false );
- }
- }
-
- pascal ComponentResult MyVersion()
- {
- if ( kDEBUGME )
- DebugStr("\pIn MyVersion()");
-
- return ( (kMyComponentSpec<<16) | (kMyComponentVersion) );
- }
-
- pascal ComponentResult MyRegister()
- {
- if ( kDEBUGME )
- DebugStr("\pIn MyRegister()");
-
- return ( false );
- }
-
- pascal ComponentResult MyTarget(Handle storage, ComponentInstance self)
- {
- GlobalsHandle globals = (GlobalsHandle) storage;
-
- if ( kDEBUGME )
- DebugStr("\pIn MyTarget()");
-
- // From now on, self will be the component instance that targeted us.
- (**globals).gSelf = self;
-
- return ( noErr );
- }